import { get, post } from "@/api/request";

/**
 * 考勤记录表 控制器 / 考勤记录表 控制器添加考勤记录表
 * @param {object} data
 * @param {array<附件传输实体>} [data.attachmentList] 附件材料
 * @param {string} [data.clockAddress] 打卡地址
 * @param {number} [data.clockLatitude] 打卡纬度
 * @param {number} [data.clockLongitude] 打卡经度
 * @param {string} [data.clockTime] 打卡时间
 * @param {number} [data.projectId] 所属项目ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<AttendanceRecord页面展示实体>}
 */
export function attendanceRecordAdd(data, config) {
  return post("/attendanceRecord/add", data, config);
}

/**
 * 考勤记录表 控制器 / 考勤记录表 控制器删除考勤记录表
 * @param {object} params
 * @param {string} params.id 考勤记录表ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<AttendanceRecord页面展示实体>}
 */
export function attendanceRecordDelete(params, config) {
  return get("/attendanceRecord/delete", params, config);
}

/**
 * 考勤记录表 控制器 / 考勤记录表 控制器查询考勤记录表详情
 * @param {object} params
 * @param {number} params.id 考勤记录表ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<AttendanceRecordDetailVO页面展示实体>}
 */
export function attendanceRecordDetail(params, config) {
  return get("/attendanceRecord/detail", params, config);
}

/**
 * 考勤记录表 控制器 / 考勤记录表 控制器分页查询考勤记录表
 * @param {object} data
 * @param {string} [data.clockEndTime] 打卡结束时间
 * @param {string} [data.clockStartTime] 打卡开始时间
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {string} [data.projectName] 项目名称
 * @param {number} [data.start] 查询记录起始下标
 * @param {string} [data.userName] 用户账号
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<AttendanceRecordPageVO页面展示实体>>}
 */
export function attendanceRecordList(data, config) {
  return post("/attendanceRecord/list", data, config);
}

/**
 * 考勤记录表 控制器 / 考勤记录表 控制器导出考勤月报
 * @param {object} data
 * @param {string} [data.clockMonth] 打卡月份格式(yyyy-MM)
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {string} [data.projectName] 项目名称
 * @param {string} [data.realName] 用户姓名
 * @param {number} [data.start] 查询记录起始下标
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise}
 */
export function attendanceRecordMonthExport(data, config) {
  return post("/attendanceRecord/month/export", data, config);
}

/**
 * 考勤记录表 控制器 / 考勤记录表 控制器分页查询考勤月报
 * @param {object} data
 * @param {string} [data.clockMonth] 打卡月份格式(yyyy-MM)
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {string} [data.projectName] 项目名称
 * @param {string} [data.realName] 用户姓名
 * @param {number} [data.start] 查询记录起始下标
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<AttendanceRecordMonthPageVO页面展示实体>>}
 */
export function attendanceRecordMonthList(data, config) {
  return post("/attendanceRecord/month/list", data, config);
}

/**
 * 考勤记录表 控制器 / 考勤记录表 控制器更新考勤记录表
 * @param {object} data
 * @param {array<附件传输实体>} [data.attachmentList] 附件材料
 * @param {string} [data.clockAddress] 打卡地址
 * @param {number} [data.clockLatitude] 打卡纬度
 * @param {number} [data.clockLongitude] 打卡经度
 * @param {string} [data.clockTime] 打卡时间
 * @param {number} [data.id] 主键ID
 * @param {number} [data.projectId] 所属项目ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<AttendanceRecord页面展示实体>}
 */
export function attendanceRecordUpdate(data, config) {
  return post("/attendanceRecord/update", data, config);
}

/**
 * @template T
 * @typedef {Object} 分页返回实体
 * @property {T[]} content - 内容
 * @property {number} elementsNo
 * @property {number} limit
 * @property {number} number
 * @property {number} totalElements
 * @property {number} totalPages
 * @description 分页返回实体
 */

/**
 * @typedef {object} 附件传输实体 附件传输实体
 * @property {string} attUrl 附件url
 * @property {number} directoryId 目录id
 * @property {number} id 附件id
 * @property {string} originalName 原始文件名
 * @description 附件传输实体
 */

/**
 * @typedef {object} AttendanceRecord页面展示实体 考勤记录表页面展示实体
 * @property {number} attendanceProjectUserId 考勤项目组用户ID
 * @property {string} clockAddress 打卡地址
 * @property {string} clockMonth 打卡月份
 * @property {string} clockTime 打卡时间
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {number} delFlag 是否已删除(0否；1是)
 * @property {number} id 主键ID
 * @property {number} projectId 所属项目ID
 * @property {string} updateTime 更新时间
 * @property {string} updateUser 更新用户
 * @description 考勤记录表页面展示实体
 */

/**
 * @typedef {object} AttendanceRecordDetailVO页面展示实体 考勤记录表页面展示实体
 * @property {array<BusinessAttachDetailVO>} attachmentList 附件材料
 * @property {number} attendanceProjectUserId 考勤项目组用户ID
 * @property {boolean} canDelete 是否拥有删除权限
 * @property {boolean} canEdit 是否拥有编辑权限
 * @property {string} clockAddress 打卡地址
 * @property {number} clockLatitude 打卡纬度
 * @property {number} clockLongitude 打卡经度
 * @property {string} clockTime 打卡时间
 * @property {string} createTime 编制人时间
 * @property {string} createUser 编制人账号
 * @property {string} createUserDeptName 编制人部门
 * @property {string} createUserRealName 编制人真实姓名
 * @property {string} deptName 所属部门
 * @property {number} id 主键ID
 * @property {number} projectId 所属项目ID
 * @property {string} projectName 项目名称
 * @property {string} realName 用户姓名
 * @description 考勤记录表页面展示实体
 */

/**
 * @typedef {object} AttendanceRecordMonthPageVO页面展示实体 考勤记录表页面展示实体
 * @property {number} attendanceProjectUserId 考勤项目组用户ID
 * @property {string} clockMonth 打卡月份
 * @property {number} exceptionNum 异常打卡次数
 * @property {number} normalNum 正常打卡次数
 * @property {string} projectId 项目id
 * @property {string} projectName 项目名称
 * @property {string} recodeIds 打卡记录id集合
 * @property {object} userInfo 考勤项目组成员表页面展示实体
 * @property {string} userInfo.deptName 所属部门
 * @property {number} userInfo.id
 * @property {string} userInfo.leadRealName 班组长
 * @property {string} userInfo.realName 用户姓名
 * @property {string} userInfo.userName 用户账号
 * @description 考勤记录表页面展示实体
 */

/**
 * @typedef {object} AttendanceRecordPageVO页面展示实体 考勤记录表页面展示实体
 * @property {array<BusinessAttachDetailVO>} attachmentList 附件材料
 * @property {number} attendanceProjectUserId 考勤项目组用户ID
 * @property {boolean} canDelete 是否拥有删除权限
 * @property {boolean} canEdit 是否拥有编辑权限
 * @property {string} clockAddress 打卡地址
 * @property {string} clockTime 打卡时间
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建人用户名
 * @property {string} createUserDeptName 创建用户所属部门
 * @property {string} createUserRealName 创建用户真实姓名
 * @property {number} id 主键ID
 * @property {string} projectName 项目名称
 * @property {object} userInfo 考勤项目组成员表页面展示实体
 * @property {string} userInfo.deptName 所属部门
 * @property {number} userInfo.id
 * @property {string} userInfo.leadRealName 班组长
 * @property {string} userInfo.realName 用户姓名
 * @property {string} userInfo.userName 用户账号
 * @description 考勤记录表页面展示实体
 */

/**
 * @typedef {object} BusinessAttachDetailVO
 * @property {string} attKey 附件key
 * @property {number} attOrder 附件排序
 * @property {number} attSize 附件大小(单位:MB)
 * @property {string} attSizeString 附件大小
 * @property {string} attSuffix 附件后缀
 * @property {string} attUrl 附件url
 * @property {number} attachId 文件id
 * @property {number} attachmentType 文件类型
 * @property {number} businessId 业务ID
 * @property {string} businessType 业务类型
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {boolean} delFlag 删除标识(false:否, true:是)
 * @property {number} directoryId 目录id
 * @property {string} filename 文件名称
 * @property {number} id 附件ID
 * @property {string} originalName 原始文件名
 * @property {string} remark 备注
 * @property {string} updateTime 修改时间
 * @property {string} updateUser 修改用户
 */
